package com.pig4cloud.pigx.contract.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.pig4cloud.pigx.common.customize.utils.serializer.BigDecimalToPlainStringSerializer;
import com.pig4cloud.pigx.contract.annotation.SetScaleMainCurrency;
import com.pig4cloud.pigx.contract.annotation.SetScaleTokenCurrency;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * app当前止盈止损委托VO类
 *
 * @date 2022/8/25 21:56
 */
@Data
@ApiModel("app当前止盈止损委托VO类")
public class AppContractCurrentStopOrderVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ApiModelProperty(value = "主键")
    @JsonSerialize(using = ToStringSerializer.class)
    private String id;

    /**
     * 币对名称
     */
    @ApiModelProperty(value = "币对名称")
    private String symbolName;

    /**
     * 仓位模式（0逐仓、1全仓）
     */
    @ApiModelProperty(value = "仓位模式（0逐仓、1全仓）")
    private String positionMode;

    /**
     * 方向（0做多、1做空）
     */
    @ApiModelProperty(value = "方向（0做多、1做空）")
    private String side;

    /**
     * 倍数
     */
    @ApiModelProperty(value = "倍数")
    private Integer multiple;

    /**
     * 委托价格
     */
    @ApiModelProperty(value = "委托价格")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    @SetScaleMainCurrency
    private BigDecimal price;

    /**
     * 委托数量
     */
    @ApiModelProperty(value = "委托数量")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    @SetScaleTokenCurrency
    private BigDecimal num;

    /**
     * 数量(币本位)
     */
    @ApiModelProperty(value = "委托数量(币本位)")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    @SetScaleTokenCurrency
    private BigDecimal currencyNum;

    /**
     * 单向/双向（0单向、1双向）
     */
    @ApiModelProperty(value = "单向/双向（0单向、1双向）")
    private String sideType;

    /**
     * 是否止盈（0否、1是）
     */
    @ApiModelProperty(value = "是否止盈（0否、1是）")
    private String hasStopProfit;

    /**
     * 止盈触发价格，是否止盈为是时不能为空
     */
    @ApiModelProperty(value = "止盈触发价格，是否止盈为是时不能为空")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    @SetScaleMainCurrency
    private BigDecimal stopProfitTrigger;

    /**
     * 止盈价格类型（0市价、1限价），是否止盈为是时不能为空
     */
    @ApiModelProperty(value = "止盈价格类型（0市价、1限价），是否止盈为是时不能为空")
    private String stopProfitType;

    /**
     * 止盈价格，止盈价格类型为限价时不能为空
     */
    @ApiModelProperty(value = "止盈价格，止盈价格类型为限价时不能为空")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    @SetScaleMainCurrency
    private BigDecimal stopProfitPrice;

    /**
     * 是否止损（0否、1是）
     */
    @ApiModelProperty(value = "是否止损（0否、1是）")
    private String hasStopLost;

    /**
     * 止损触发价格，是否止损为是时不能为空
     */
    @ApiModelProperty(value = "止损触发价格，是否止损为是时不能为空")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    @SetScaleMainCurrency
    private BigDecimal stopLostTrigger;

    /**
     * 止损价格类型（0市价、1限价），是否止损为是时不能为空
     */
    @ApiModelProperty(value = "止损价格类型（0市价、1限价），是否止损为是时不能为空")
    private String stopLostType;

    /**
     * 止损价格，止损价格类型为限价时不能为空
     */
    @ApiModelProperty(value = "止损价格，止损价格类型为限价时不能为空")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    @SetScaleMainCurrency
    private BigDecimal stopLostPrice;

    /**
     * 触发时间
     */
    @ApiModelProperty(value = "触发时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime triggerTime;

    /**
     * 实际触发方向（0止盈、1止损）
     */
    @ApiModelProperty(value = "实际触发方向（0止盈、1止损）")
    private String actualTriggerSide;

    /**
     * 实际委托数量
     */
    @ApiModelProperty(value = "实际委托数量")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    private BigDecimal actualNum;

    /**
     * 实际委托价格
     */
    @ApiModelProperty(value = "实际委托价格")
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    private BigDecimal actualPrice;

    /**
     * 生成的订单id
     */
    @ApiModelProperty(value = "生成的订单id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long orderId;

    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 委托状态（0待生效、1已生效、2已撤销、3已过期）
     */
    @ApiModelProperty(value = "委托状态（0待生效、1已生效、2已撤销、3已过期）")
    private String status;

    /**
     * 主币名称
     */
    @ApiModelProperty(value = "主币名称")
    private String mainCurName;

    /**
     * 外币名称
     */
    @ApiModelProperty(value = "外币名称")
    private String tokenCurName;

    /**
     * 前端展示类型
     */
    private String type;

    /**
     * 张数
     */
    @JsonSerialize(using = BigDecimalToPlainStringSerializer.class)
    private BigDecimal sheet;
}
